package com.wei800.turnover.mapper.vlaibao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wei800.turnover.entity.Userinfo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Mapper // 必须追加的定义，这是数据层的接口
public interface IUserinfoMapper extends BaseMapper<Userinfo> { // 定义DAO接口
    /**
     * 调用INSERT命令，实现数据增加
     * @param user 要增加的数据对象，不包含ID
     * @return 增加成功返回true，否则返回false
     */
    public boolean doCreate(Userinfo user);
    /**
     * 调用INSERT命令，实现数据批量增加
     * @param userList 要增加的数据对象，不包含ID
     * @return 增加成功返回true，否则返回false
     */
    public boolean doCreateBatch(List<Userinfo> userList);
    /**
     * 调用UPDATE命令，根据ID进行数据更新，需要更新的数据设置属性，不需要更新的数据属性内容为null
     * @param user 要修改的数据对象，包含ID
     * @return 更新成功返回true，否则返回false
     */
    public boolean doUpdate(Userinfo user);

    /**
     * 调用UPDATE命令实现数据删除，在本项目中已经禁止使用DELETE命令，所有的删除以删除列的标记为主
     * @param ids 要删除的数据ID，可以包含有多个
     * @return 删除成功返回true，否则返回false
     */
    public boolean doDelete(Set<Long> ids);

    /**
     * 使用SELECT指令，根据ID查询数据，开发中禁止使用SELECT *，必须明确的写上要查询的字段
     * @param id 要查询的数据ID
     * @return 如果指定ID数据存在，则以对象的形式返回，如果数据不存在，则返回NULL
     */
    public Userinfo findById(Long id);

    /**
     * 使用SELECT指令，查询若干个ID的用户数据
     * @param ids 要查询的ID数据集合
     * @return 满足ID的用户对象
     */
    public List<Userinfo> findByIds(Set<Long> ids);

    /**
     * 获取数据表中全部数据量，使用COUNT()函数，支持模糊查询，实际之中慎用
     * @param params 查询参数：
     *  1. column 要查询的数据列
     *  2. keyword 要查询的关键字
     * @return 满足查询关键字的数据量
     */
    public Long getAllCount(Map<String, Object> params);

    /**
     * 模糊查询用户
     * @param params 查询参数，包含如下内容：
     *  1. startLine 开始记录行数
     *  2. lineSize 每页显式的数据行数
     *  3. column 模糊查询列（如果不需要模糊查询，则此参数设置为null）
     *  4. keyword 模糊查询关键字（如果不需要模糊查询，则此参数设置为null）
     * @return 用户对象集合
     */
    public List<Userinfo> findAll(Map<String, Object> params);
    /**
     * 使用SELECT指令，根据Phone查询数据，开发中禁止使用SELECT *，必须明确的写上要查询的字段
     * @param phone 要查询的数据ID
     * @return 如果指定ID数据存在，则以对象的形式返回，如果数据不存在，则返回NULL
     */
    public Userinfo findByPhone(String phone);
}
